package org.jsola.hr.web;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.jsola.core.Page;
import org.jsola.core.Result;
import org.jsola.hr.dto.CompanyBalanceAddDTO;
import org.jsola.hr.dto.CompanyBalanceUpdateDTO;
import org.jsola.hr.query.CompanyBalanceQuery;
import org.jsola.hr.vo.CompanyBalanceListVO;
import org.jsola.hr.vo.CompanyBalanceVO;

import java.util.List;

/**
 * 用工单位账面余额表
 *
 * @author zhr
 */
@Api(tags = "hr-用工单位账面余额表")
public interface ICompanyBalanceControllerAPI {

    /**
     * 新增用工单位账面余额表
     *
     * @param companyBalanceAddDTO 用工单位账面余额表新增实体
     * @return 用工单位账面余额表展示对象
     */
    @ApiOperation(value = "新增用工单位账面余额表")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyBalanceAddDTO", dataType = "CompanyBalanceAddDTO", value = "新增用工单位账面余额表", paramType = "body")
    })
    Result<CompanyBalanceVO> save(CompanyBalanceAddDTO companyBalanceAddDTO);


    /**
     * 修改用工单位账面余额表
     *
     * @param companyBalanceUpdateDTO 用工单位账面余额表
     * @return 更新数量
     */
    @ApiOperation(value = "修改用工单位账面余额表")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyBalanceUpdateDTO", dataType = "CompanyBalanceUpdateDTO", value = "修改用工单位账面余额表", paramType = "body")
    })
    Result<Integer> update(CompanyBalanceUpdateDTO companyBalanceUpdateDTO);


    /**
     * 删除单个用工单位账面余额表，彻底删除
     *
     * @param companyBalanceId 用工单位账面余额表id
     * @return 删除数量
     */
    @ApiOperation(value = "删除单个用工单位账面余额表，彻底删除")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyBalanceId", dataType = "Long", value = "用工单位账面余额表id", paramType = "path")
    })
    Result<Integer> delete(Long companyBalanceId);


    /**
     * 批量删除用工单位账面余额表，彻底删除
     *
     * @param companyBalanceIds 用工单位账面余额表id集合
     * @return 删除数量
     */
    @ApiOperation(value = "批量删除用工单位账面余额表，彻底删除")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyBalanceIds", dataType = "Long[]", value = "用工单位账面余额表id数组", paramType = "body", allowMultiple = true)
    })
    Result<Integer> deleteBatch(Long[] companyBalanceIds);


    /**
     * 根据用工单位账面余额表id查询用工单位账面余额表详情
     *
     * @param companyBalanceId 用工单位账面余额表id
     * @return 用工单位账面余额表详情
     */
    @ApiOperation(value = "根据用工单位账面余额表id查询用工单位账面余额表详情")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyBalanceId", dataType = "Long", value = "用工单位账面余额表id", paramType = "path")
    })
    Result<CompanyBalanceVO> findById(Long companyBalanceId);


    /**
     * 查询用工单位账面余额表
     *
     * @param companyBalanceQuery 用工单位账面余额表查询参数
     * @return page
     */
    @ApiOperation(value = "查询用工单位账面余额表")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyBalanceQuery", dataType = "CompanyBalanceQuery", value = "用工单位账面余额表查询参数", paramType = "query")
    })
    Result<List<CompanyBalanceListVO>> listAll(CompanyBalanceQuery companyBalanceQuery);


    /**
     * 分页查询用工单位账面余额表
     *
     * @param companyBalanceQuery 用工单位账面余额表查询参数
     * @return page
     */
    @ApiOperation(value = "分页查询用工单位账面余额表")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyBalanceQuery", dataType = "CompanyBalanceQuery", value = "用工单位账面余额表查询参数", paramType = "query")
    })
    Result<Page<CompanyBalanceListVO>> page(CompanyBalanceQuery companyBalanceQuery);

    /**
     * 查询租户账面余额
     *
     * @return 对象
     */
    @ApiOperation(value = "查询租户账面余额")
    @ApiImplicitParams({
    })
    Result<CompanyBalanceVO> selectBySiteId();

    /**
     * 根据用工单位ids查询租户账面余额
     *
     * @param companyIds 用工单位ids
     * @return 对象
     */
    @ApiOperation(value = "根据用工单位ids查询租户账面余额")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyIds", dataType = "String[]", value = "用工单位ids", paramType = "body")
    })
    Result<CompanyBalanceVO> selectByCompanyIds(String[] companyIds);


}

